const fs = require('fs')

// 解决方案二：发布-订阅模式(Bus 通信)
let event = {
  // 存储订阅事件的函数的数组
  _arr: [],
  // 订阅-监听事件
  on(fn) {
    this._arr.push(fn)
  },
  // 发布-触发事件
  emit() {
    this._arr.forEach(fn => fn())
  }
}
let student = {}
event.on(() => {
  console.log('读取一个文件')
})
event.on(() => {
  if (Object.keys(student).length === 2) {
    console.log(student)
  }
})
fs.readFile('./file/name.txt', 'utf8', (err, data) => {
  student.name = data
  event.emit()
})
fs.readFile('./file/age.txt', 'utf8', (err, data) => {
  student.age = data
  event.emit()
})

// 问：发布-订阅模式 和 观察者模式有什么区别
// 答：发布-订阅模式之间发布者和订阅者之间是没有关系的，而观察者模式是基于发布-订阅模式，
// 但是观察者和被观察者之间是有联系的，观察者需要添加到被观察者中绑定，被观察者状态发生改
// 变通知观察者执行 update 方法
